package interpreter.main.express;

import interpreter.main.context.Context;

import java.util.ArrayList;

public class ListExpression implements IExpressions {

    private Context context;

    private final ArrayList<IExpressions> list = new ArrayList<>();

    /**
     * 解析
     */
    @Override
    public void pares(Context context) {
        this.context = context;
        //在ListExpression解析表达式中，循环解释语句中的每一个单词,直至终结符表达式或者异常情况退出
        while (true) {
            if (null == this.context.getCurrentToken()) {
                //获取当前节点，如果为null，则表示缺少END表达式
                System.out.println("Error:The Expression Missing 'END'");
                break;
            } else if (this.context.equalsWithCommand("END")) {
                this.context.next();
                //解析正常结束
                break;
            } else {
                //建立Command表达式
                IExpressions expressions = new CommandExperssion(this.context);
                //添加到列表中
                list.add(expressions);
            }
        }
    }

    /**
     * 执行方法
     */
    @Override
    public void interpret() {
        //循环list列表中每一个表达式，解释执行
        for (IExpressions iExpressions : list) {
            iExpressions.interpret();
        }
    }
}
